package com.zyy.state.demo01;

/**
 * @Description: 类描述
 * @Author: zyy
 * @Date: 2023/08/08 21:15
 */
public class Lift implements ILift {
    private int state;

    @Override
    public void setState(int state) {
        this.state = state;

    }

    @Override
    public void open() {
        switch (this.state) {
            case CLOSING_STATE:
                //关闭状态，打开门
                System.out.println("电梯开门。。。");
                setState(OPENING_STATE);
                break;
            case OPENING_STATE:
                //已经开门了，不能再开门
                break;
            case RUNNING_STATE:
                //电梯运行中，是关门状态，不能开门
                break;
            case STOPPING_STATE:
                //停止时，电梯也是关门的，打开门
                System.out.println("电梯开门。。。");
                setState(OPENING_STATE);
                break;
            default:
                break;
        }
    }

    @Override
    public void close() {
        switch (this.state) {
            case CLOSING_STATE:
                //已经是关闭状态，不能再关门
                break;
            case OPENING_STATE:
                System.out.println("电梯关门。。。");
                //关门之后电梯就是关闭状态了
                setState(CLOSING_STATE);
                break;
            case RUNNING_STATE:
                //电梯运行中，已经是关门状态，不能再关门
                break;
            case STOPPING_STATE:
                //停止时，电梯也是关门的，不能再关门
                break;
            default:
                break;
        }

    }

    @Override
    public void stop() {
        switch (this.state) {
            case CLOSING_STATE:
                //关门时才可以停止
                System.out.println("电梯停止了。。。");
                setState(STOPPING_STATE);
                break;
            case OPENING_STATE:
                //开门状态，不能停止
                break;
            case RUNNING_STATE:
                //运行时当然可以停止了
                System.out.println("电梯停止了。。。");
                setState(STOPPING_STATE);
                break;
            case STOPPING_STATE:
                //停止时，不能再停止
                break;
            default:
                break;
        }

    }

    @Override
    public void run() {
        switch (this.state) {
            case CLOSING_STATE:
                //关门时才可以运行
                System.out.println("电梯运行中。。。");
                setState(RUNNING_STATE);
                break;
            case OPENING_STATE:
                //开门状态，不能运行
                break;
            case RUNNING_STATE:
                //运行时，不能再运行
                break;
            case STOPPING_STATE:
                //停止时，可以运行
                System.out.println("电梯运行中。。。");
                setState(RUNNING_STATE);
                break;
            default:
                break;
        }

    }
}
